const fs = require('fs'),
    fse = require('fs-extra'),
    ComTool = require('./commonTools');

/**
 * 读取文件内容
 * @param {String} url 文件路径
 * @param {String} file 文件名
 * @returns {String} 文件内容
 */
exports.readLyric = (url, file) => {
    let lyric = null;
    if (fse.existsSync(url + file)) {
        lyric = fs.readFileSync(url + file, 'utf-8', (err, data) => {
            if (err) {
                console.log("错误：", err);
                return null;
            } else {
                return data;
            }
        })
        return lyric;
    }
    console.log("路径不存在");
    return lyric;
}

/**
 * 新建写入文件             
 * @param {String} url 保存的文件路径
 * @param {String} name 保存的文件名
 * @param {String} txt 保存文本
 * @returns {Boolean} true/false
 */
exports.writeLyric = async (url, name, txt) => {
    if (url && txt) {
        try {
            if (!fse.existsSync(url)) {
                await fse.mkdirs(url);
            }
            let path = url + name;
            fs.writeFileSync(path, txt, (err, data) => {
                if (err) {
                    console.log("写入失败");
                    console.log(err);
                }
                console.log("写入成功");
                return true;
            })
        }
        catch (error) {
            console.log("文件保存失败-(controller\\user):" + error);
            return false;
        }
    }
    return null;
}

/**
 * 创建文件夹
 * @param {String} url 文件夹路径
 */
exports.createFloder = async (url) => {
    if (!fse.existsSync(url)) {
        await fse.mkdirs(url);
        return true;
    }
}

/**
 * 删除空文件夹
 * @param {String} url 文件夹路径
 */
exports.removeFloder = (url) => {
    if (fs.existsSync(url)) {
        fs.rmdirSync(url);
        return true;
    }
    console.log("指定文件夹不存在");
    return false;
}

/**
 * 删除整个文件夹包括文件
 * @param {String}} fileUrl 文件夹路径
 */
exports.emptyFloder = (fileUrl) => {
    var files = fs.readdirSync(fileUrl);//读取该文件夹
    files.forEach(function (file) {
        var stats = fs.statSync(fileUrl + '/' + file);
        if (stats.isDirectory()) {
            this.emptyFloder(fileUrl + '/' + file);
        } else {
            fs.unlinkSync(fileUrl + '/' + file);
            console.log("删除文件" + fileUrl + '/' + file + "成功");
        }
    });
    this.removeFloder(fileUrl);
}

/**
 * 删除文件
 * @param {String} url 文件夹路径
 * @param {String} file 文件名
 * @returns Boolean
 */
exports.removeFile = (url, file) => {
    console.log("删除文件:", url + file);
    if (fs.existsSync(url + file)) {
        fs.unlinkSync(url + file);
        console.log("文件删除成功：" + url + file);

        let files = fs.readdirSync(url);
        if (files.length === 0) { // 如果文件夹为空 删除文件夹
            this.removeFloder(url);
        }
        return true;
    }
    console.log("指定文件不存在：" + url + file);
    return false;
};

/**
 * 保存图片(Base64编码)
 * @param {Object} file 用户图片参数
 * @param {String} savePath 保存路径
 * return 图片相关参数 / false
 */
exports.saveImage = async (file, savePath) => {
    let { name, size, type, myBase64 } = file;

    // Base64编码转换
    let imgData = myBase64,
        base64Data = imgData.replace(/^data:image\/\w+;base64,/, ""),
        dataBuffer = Buffer.from(base64Data, 'base64');

    let newName = ComTool.generateFilename(name);


    try {
        let currentDay = ComTool.getCurrentDay();
        this.createFloder(savePath);
        this.createFloder(savePath + '/' + currentDay);

        let newData = {
            name: newName,
            size,
            type,
            saveFloder: currentDay,
            localPath: savePath + newName
        };

        // 保存文件
        fs.writeFileSync(savePath + '/' + currentDay + '/' + newName, dataBuffer);

        console.log("图片保存成功-(controller\\user)");
        return newData;
    }
    catch (error) {
        console.log("图片保存失败-(controller\\user):" + error);
        return false;
    }

}